package com.gonsin.ta.example.nodes.nodeMethods;

import com.gonsin.ta.logic.annotations.NodeMethod;
import com.gonsin.ta.logic.enums.NodeTypeEnum;
import com.gonsin.ta.logic.parse.condition.context.ChainContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;


/**
 * 节点方法例子
 */
@Component
@Slf4j
public class NodeDemoService {


    // 支持@NodeMethod将一个方法作为节点
    @NodeMethod(type = NodeTypeEnum.RUN, nodeId = "执行节点例子")
    public void runDemo(ChainContext context){
        log.info("执行节点例子");
    }


    // 支持@NodeMethod将一个方法作为节点
    @NodeMethod(type = NodeTypeEnum.SWITCH, nodeId = "选择节点例子")
    public String switchDemo(ChainContext context){
        log.info("选择节点例子");

        // 选择节点必须返回String类型
        return "ok";
    }


    // 支持@NodeMethod将一个方法作为节点
    @NodeMethod(type = NodeTypeEnum.SIGNAL, nodeId = "信号节点例子")
    public void signalDemo(ChainContext context){
        log.info("信号节点例子");
    }


    // 支持@NodeMethod将一个方法作为节点
    @NodeMethod(type = NodeTypeEnum.SWITCH, nodeId = "查看下一个审核人")
    public String checkNextOne(ChainContext context){
        log.info("是否有下一个人");
        int currentIndex = 0;
        Object value = context.getValue("CURRENT_INDEX");
        if(value == null){
            currentIndex = 0;
        } else {
            currentIndex = Double.valueOf(value.toString()).intValue();
        }
        if(currentIndex >= 3){
            return "false";
        }

        currentIndex ++;
        context.putValue("CURRENT_INDEX", currentIndex);
        return "true";
    }

}
